javascript oop、instanceof 和基类
全部标签 假设我们有:ClassBase{virtualvoidf(){g();};virtualvoidg(){//DosomeBaserelatedcode;}};ClassDerived:publicBase{virtualvoidf(){Base::f();};virtualvoidg(){//DosomeDerivedrelatedcode};};intmain(){Base*pBase=newDerived;pBase->f();return0;}将从Base::f()调用哪个g()?Base::g()还是Derived::g()?谢谢... 最佳答案
这是一个非常基本的问题,只是为了满足我的好奇心,但是有没有办法做这样的事情:if(obj!instanceofArray){//TheobjectisnotaninstanceofArray}else{//TheobjectisaninstanceofArray}这里的关键是能够使用NOT!在实例前面。通常我必须设置的方式是这样的:if(objinstanceofArray){//Donothinghere}else{//TheobjectisnotaninstanceofArray//Performactions!}当我只想知道对象是否是特定类型时,必须创建一个else语句有点烦人。
这是一个非常基本的问题,只是为了满足我的好奇心,但是有没有办法做这样的事情:if(obj!instanceofArray){//TheobjectisnotaninstanceofArray}else{//TheobjectisaninstanceofArray}这里的关键是能够使用NOT!在实例前面。通常我必须设置的方式是这样的:if(objinstanceofArray){//Donothinghere}else{//TheobjectisnotaninstanceofArray//Performactions!}当我只想知道对象是否是特定类型时,必须创建一个else语句有点烦人。
虚基类的概念及用法如果派生类的全部或者部分基类有共同的基类,那么派生类的这些直接基类从上一级基类继承的成员都具有相同的名称,定义了派生类的对象后,同名数据成员就会在内存中有多份拷贝,同名函数也会有多个映射。访问这些同名成员时,为了唯一标识它们可以使用上一讲中的作用域分辨符,也可以使用虚基类技术。我们将派生类直接基类的共同基类声明为虚基类后,派生类从不同的直接基类继承来的同名数据成员在内存中就会只有一份拷贝,同名函数也会只有一个映射,这样不仅实现了唯一标识同名成员,而且也节省了内存空间,可见虚基类技术是很实用的。在派生类声明时除继承方式外还使用关键字virtual限定基类的话,此基类就是虚基类。
虚基类的概念及用法如果派生类的全部或者部分基类有共同的基类,那么派生类的这些直接基类从上一级基类继承的成员都具有相同的名称,定义了派生类的对象后,同名数据成员就会在内存中有多份拷贝,同名函数也会有多个映射。访问这些同名成员时,为了唯一标识它们可以使用上一讲中的作用域分辨符,也可以使用虚基类技术。我们将派生类直接基类的共同基类声明为虚基类后,派生类从不同的直接基类继承来的同名数据成员在内存中就会只有一份拷贝,同名函数也会只有一个映射,这样不仅实现了唯一标识同名成员,而且也节省了内存空间,可见虚基类技术是很实用的。在派生类声明时除继承方式外还使用关键字virtual限定基类的话,此基类就是虚基类。
我目前有一些单元测试共享一组通用测试。这是一个例子:importunittestclassBaseTest(unittest.TestCase):deftestCommon(self):print'CallingBaseTest:testCommon'value=5self.assertEquals(value,5)classSubTest1(BaseTest):deftestSub1(self):print'CallingSubTest1:testSub1'sub=3self.assertEquals(sub,3)classSubTest2(BaseTest):deftestSub2
我目前有一些单元测试共享一组通用测试。这是一个例子:importunittestclassBaseTest(unittest.TestCase):deftestCommon(self):print'CallingBaseTest:testCommon'value=5self.assertEquals(value,5)classSubTest1(BaseTest):deftestSub1(self):print'CallingSubTest1:testSub1'sub=3self.assertEquals(sub,3)classSubTest2(BaseTest):deftestSub2
我发现使用getClass()和==运算符优于instanceOf运算符时性能有所提高。Objectstr=newInteger("2000");longstarttime=System.nanoTime();if(strinstanceofString){System.out.println("itsstring");}else{if(strinstanceofInteger){System.out.println("itsinteger");}}System.out.println((System.nanoTime()-starttime));starttime=System.na
我发现使用getClass()和==运算符优于instanceOf运算符时性能有所提高。Objectstr=newInteger("2000");longstarttime=System.nanoTime();if(strinstanceofString){System.out.println("itsstring");}else{if(strinstanceofInteger){System.out.println("itsinteger");}}System.out.println((System.nanoTime()-starttime));starttime=System.na
我想做这样的事情:Listanimals=newArrayList();for(Classc:list_of_all_classes_available_to_my_app())if(cisAnimal)animals.add(newc());所以,我想查看我的应用程序Universe中的所有类,当我找到一个派生自Animal的类时,我想创建一个该类型的新对象并将其添加到列表中。这使我无需更新事物列表即可添加功能。我可以避免以下情况:Listanimals=newArrayList();animals.add(newDog());animals.add(newCat());animal